import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
import plotly
import plotly.graph_objs as go
from cv_util_func import *
import warnings
warnings.filterwarnings("ignore")
pd.set_option('display.float_format', lambda x: '%.f' % x)
pd.options.display.float_format = '{:,}'.format
mpl.rcParams['figure.dpi'] = 150
plt.style.use('seaborn-paper')
worldmetersLink = "https://www.worldometers.info/coronavirus/"
data_wd_covid_br, today = get_wordometers_covid('Brazil', worldmetersLink)
# Saving Brazil info
Total_infected = data_wd_covid_br[0]
New_Cases = data_wd_covid_br[1]
Total_Deaths = data_wd_covid_br[2]
New_Deaths = data_wd_covid_br[3]
Recovred = data_wd_covid_br[4]
Active_Case = data_wd_covid_br[5]
Serious_Critical = data_wd_covid_br[6]
date = today
Confirmed cases by day, using information from the news. Covid19br dataset is available at GitHub https://github.com/wcota/covid19br, with data by city compiled from original dataset provided by Brasil.IO.
Thanks to:
License: Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0)
More information: https://wcota.me/covid19br and ESPECIAL COVID-19 - Dados por MunicÃpio
Number of total cases by city
dt, dt_tm, dt_tm_city, dt_state, total_cases, deaths, cfr = get_brazil_cv_data(
date, save=False)
Total cases by state
dt_state.sort_values('deaths', ascending=False)
plot_cases(dt_tm, 'TOTAL', y_scale='linear', n_0=1000, mov=7, show=True, save=False)
plot_cases(dt_tm, 'TOTAL', y_scale='log', n_0=1000, mov=7, show=True, save=False)
top_cities = list(dt.sort_values('totalCases', ascending=False)[:10].city)
top_cities
for city in top_cities:
plot_cases(dt_tm, city, y_scale='linear', n_0=100, mov=7, show=True, save=False)
plot_cases(dt_tm, city, y_scale='log', n_0=100, mov=7, show=True, save=False)
plot_mov_ave_deaths_last_week(dt_tm, city, y_scale='linear', n_0=3, mov=7, show=True, save=False)
def plot_mov_ave_deaths_last_week_2(data,
city,
n_0=100,
y_scale='log',
mov=7,
graph='bar',
show=False,
save=True,
rect=False,
x0=None,
x1=None,
text=None):
date = datetime.datetime.today()
data = data[data.city == city]
tst = data[data.deaths >= n_0]
tst.reset_index(drop=True, inplace=True)
tst['new_deaths'] = tst['deaths'] - tst['deaths'].shift(1)
tst['new_deaths_Mov_Ave'] = tst.iloc[:, -1].rolling(window=mov).mean()
tst['mov_ave_new_deaths_last_week'] = tst['new_deaths_Mov_Ave'] - tst[
'new_deaths_Mov_Ave'].shift(7)
fig = go.Figure()
if graph == 'bar':
fig.add_trace(
go.Bar(x=tst.date,
y=round(tst.new_deaths_Mov_Ave),
name='New daily deaths'))
fig.add_trace(
go.Bar(x=tst.date,
y=round(tst.mov_ave_new_deaths_last_week),
name='New daily deaths vs last week'))
else:
fig.add_trace(
go.Scatter(x=tst.date,
y=round(tst.new_deaths_Mov_Ave),
name='New daily Deaths',
line=dict(color='royalblue', width=2)))
fig.add_trace(
go.Scatter(x=tst.date,
y=round(tst.mov_ave_new_deaths_last_week),
name='New daily deaths vs last week',
line=dict(color='firebrick', width=2)))
if rect == True:
fig.update_layout(
shapes=[
# 1st highlight during Feb 4 - Feb 6
dict(
type="rect",
# x-reference is assigned to the x-values
xref="x",
# y-reference is assigned to the plot paper [0,1]
yref="paper",
x0=x0,
y0=0,
x1=x1,
y1=1,
fillcolor="LightSalmon",
opacity=0.3,
layer="below",
line_width=0,
)
],
annotations=[
dict(x=x0,
y=0.8,
xref="x",
yref='paper',
text=text,
showarrow=True,
font=dict(family="Courier New, monospace",
size=16,
color="#ffffff"),
align="center",
arrowhead=2,
arrowsize=1,
arrowwidth=2,
arrowcolor="#636363",
ax=20,
ay=-30,
bordercolor="#c7c7c7",
borderwidth=2,
borderpad=4,
bgcolor="#ff7f0e",
opacity=0.5)
])
fig.update_layout(
title='Brazil ({}) - New Daily Deaths by Covid-19 versus same day previous week'.
format(city),
xaxis_title="Day",
yaxis_title="Number of Deaths",
yaxis_type=y_scale,
font=dict(size=10, color="#7f7f7f"),
legend=dict(x=0,
y=1.0,
bgcolor='rgba(255, 255, 255, 0)',
bordercolor='rgba(255, 255, 255, 0)'),
annotations=[
dict(
x=0,
y=1.05,
text='Deaths over {:,} - Y-scale: {} ({}-day rolling average) - {}/{}/{}'
.format(n_0, y_scale, mov, date.year, date.month, date.day),
showarrow=False,
xref='paper',
yref='paper',
xanchor='left',
yanchor='auto',
xshift=0,
yshift=0,
font=dict(size=10, color="#7f7f7f")),
dict(
x=0,
y=1.05,
text='Deaths over {:,} - Y-scale: {} ({}-day rolling average) - {}/{}/{}'
.format(n_0, y_scale, mov, date.year, date.month, date.day),
showarrow=False,
xref='paper',
yref='paper',
xanchor='left',
yanchor='auto',
xshift=0,
yshift=0,
font=dict(size=10, color="#7f7f7f")),
dict(x=1,
y=-0.10,
text="Source: Brasil.io - https://brasil.io/dataset/covid19/caso/",
showarrow=False,
xref='paper',
yref='paper',
xanchor='right',
yanchor='auto',
xshift=0,
yshift=0,
font=dict(size=8, color='royalblue')),
dict(x=1,
y=-0.14,
text="Created by Marcelo Rovai - https://MJRoBot.org",
showarrow=False,
xref='paper',
yref='paper',
xanchor='right',
yanchor='auto',
xshift=0,
yshift=0,
font=dict(size=8, color='royalblue'))
])
if save == True:
city = city.replace('/', '-')
fig.write_image(
'../graphs/cv19_' + city + '_' + y_scale +
'_CV_Mov_ave_deaths_last_week_Evolution_Graph_updated.png')
if show == True:
fig.show()
return tst
tst = plot_mov_ave_deaths_last_week_2(dt_tm,
'Fortaleza/CE',
y_scale='linear',
n_0=3,
mov=7,
graph='line',
show=True,
save=False,
rect=True,
x0='2020-05-07',
x1='2020-05-31',
text="Lock-Down")
tst = plot_mov_ave_deaths_last_week_2(dt_tm,
'São Paulo/SP',
y_scale='linear',
n_0=3,
mov=7,
graph='line',
show=True,
save=False,
rect=True,
x0='2020-05-20',
x1='2020-05-25',
text="Holidays")
tst = plot_mov_ave_deaths_last_week_2(dt_tm,
'Recife/PE',
y_scale='linear',
n_0=3,
mov=7,
graph='line',
show=True,
save=False,
rect=True,
x0='2020-05-16',
x1='2020-05-31',
text="Lock-Down")
tst = plot_mov_ave_deaths_last_week_2(dt_tm,
'Rio de Janeiro/RJ',
y_scale='linear',
n_0=3,
mov=7,
graph='line',
show=True,
save=False,
rect=False,
x0='2020-05-07',
x1='2020-05-25',
text="Lock-Down")
tst = plot_mov_ave_deaths_last_week_2(dt_tm,
'Manaus/AM',
y_scale='linear',
n_0=3,
mov=7,
graph='line',
show=True,
save=False,
rect=False,
x0='2020-05-07',
x1='2020-05-25',
text="Lock-Down")
tst = plot_mov_ave_deaths_last_week_2(dt_tm,
'TOTAL',
y_scale='linear',
n_0=3,
mov=7,
graph='line',
show=True,
save=False,
rect=False,
x0='2020-05-07',
x1='2020-05-25',
text="Lock-Down")